//订阅/发布模式
//一个对象订阅另一个对象的特定活动并在状态改变后获得通知。订阅者因此也成为观察者,而被观察的对象成为发布者或者主题

class Event{
    constructor(){
        this.callbacks = {}
    }
    $off(name){
        this.callbacks[name] = null;
    }
    $emit(name,args){
        let cbs = this.callbacks[name];
        if(cbs){
            cbs.forEach(c=>{
                c.call(this,args)
            })
        }
    }
    $on(name,fn){
        (this.callbacks[name]||(this.callbacks[name]=[])).push(fn)
    }
}

let event = new Event()
event.$on('event1',function(arg){
    console.log('事件1',arg)
})

event.$emit('event1',{name:'开课吧'})
event.$off('event1')